package com.xteam.xnetworkdisk.utils;

import com.xteam.xnetworkdisk.constant.Constant;
import com.xteam.xnetworkdisk.utilsinterface.FileUtils;
//import io.minio.MinioClient;
//import io.minio.errors.MinioException;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

//@Slf4j
//@Component
public class MinioUtilsOld /*implements FileUtils*/ {

//    @Autowired
//    private MinioClient client;
//    @Value("${minio.endpoint}")
//    private String endpoint;
//
//    /**
//     * 创建bucket
//     *
//     * @param bucketName bucket名称
//     */
////    @SneakyThrows
////    public void createBucket(String bucketName) {
////        if (!client.bucketExists(bucketName)) {
////            client.makeBucket(bucketName);
////        }
////    }
//
//    public void createBucket(String bucketName) {
//
//    }
//
//    /**
//     *
//     * 原地复制文件
//     * @param bucketName
//     * @param oldFileName
//     * @return
//     */
//    public String copyFile(String bucketName,String oldFileName) {
//        try {
////            // 判断存储桶是否存在
////            createBucket(bucketName);
////            // 开始复制
////            String newFileName = System.currentTimeMillis() + oldFileName.substring(oldFileName.lastIndexOf("."));
////            client.copyObject(bucketName, oldFileName, bucketName,newFileName);
////            String path = endpoint + "/" + bucketName + "/" + newFileName;
////            if(client.getObject(Constant.USER_FILE_BUKET,oldFileName+ Constant.VIDEO_SUFFIX)!=null){
////                newFileName = newFileName + Constant.VIDEO_SUFFIX;
////                client.copyObject(bucketName, oldFileName, bucketName,newFileName);
////            }
////            return path;
//        } catch (Exception e) {
//            log.error("上传文件失败：{}", e.getMessage());
//            return null;
//        }
//        return null;
//    }
//
//    @Override
//    public String uploadFile(MultipartFile file, String bucketName, String suffix) {
//        return "";
//    }
//
//    @Override
//    public String uploadFile(InputStream file, String bucketName, String suffix, Long fileSize, String contentType) {
//        return "";
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param file       文件
//     * @param bucketName 存储桶
//     * @return 上传后的文件名
//     */
//    public String uploadFile(MultipartFile file, String bucketName) {
//        try {
//            // 判断存储桶是否存在
////            createBucket(bucketName);
//            // 文件名
//            String originalFilename = file.getOriginalFilename();
//            // 获取文件后缀名
//            String fileExtension = "";
//            int dotIndex = originalFilename.lastIndexOf(".");
//            if (dotIndex != -1) {
//                fileExtension = originalFilename.substring(dotIndex);
//            }
//            // 新的文件名 = 时间戳.后缀名
//            String fileName = System.currentTimeMillis() + fileExtension;
//            // 开始上传
////            client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
//
//            return fileName;
//        } catch (Exception e) {
//            log.error("上传文件失败：", e); // 更详细的错误日志记录
//            throw new RuntimeException("文件上传失败：" + e.getMessage()); // 重新抛出异常以便调用者处理
//        }
//    }
//
//    /**
//     * 根据全路径删除文件
//     * @param fullPath 文件的完整路径
//     * @return 删除操作是否成功
//     */
//    public boolean deleteFile(String fullPath) {
//        if (fullPath == null || fullPath.trim().isEmpty()) {
//            // 校验全路径的合法性，如果为空或不合法则返回false
//            return false;
//        }
//
//        try {
//            // 使用注入的 MinIO 客户端
//            // 要删除的存储桶和文件
//            String[] strings = parseBucketAndFilename(fullPath);
//            if (strings == null || strings.length != 2) {
//                // 校验解析后的存储桶和文件名是否有效
//                return false;
//            }
//
//            String bucketName = strings[0];
//            String fileName = strings[1];
//
//            // 删除文件
////            client.removeObject(bucketName, fileName);
//            return true;
//
//        } catch (Exception e) {
//            // 记录日志，而不是直接打印堆栈信息
//            log.error("删除文件时发生异常", e);
//            return false;
//        }
//    }
//
//    /**
//     * 根据完整路径解析出 bucketName 和 filename
//     *
//     * @param fullPath 完整路径
//     * @return 包含 bucketName 和 filename 的数组
//     */
//    public String[] parseBucketAndFilename(String fullPath) {
//        // 去掉协议和主机部分
//        String path = fullPath.replaceAll("^[a-zA-Z]+://[^/]+/", "");
//
//        // 分割路径
//        String[] parts = path.split("/", 2);
//
//        // 提取 bucketName 和 filename
//        String bucketName = parts[0];
//        String filename = (parts.length > 1) ? parts[1] : "";
//
//        return new String[]{bucketName, filename};
//    }
//
//
//    /**
//     * 下载文件
//     * @param inputStream
//     * @param bucketName
//     * @param fileName
//     * @param contentType
//     * @return
//     * @throws Exception
//     */
//    public String uploadFile(InputStream inputStream, String bucketName, String fileName, String contentType) throws Exception {
//        // 参数非空检查
//        if (inputStream == null || bucketName == null || fileName == null || contentType == null) {
//            throw new IllegalArgumentException("参数不能为空");
//        }
//
//        try {
//            // 判断存储桶是否存在
////            createBucket(bucketName);
//            // 使用try-with-resources确保InputStream正确关闭
//            try (InputStream is = inputStream) {
//                // 开始上传
////                client.putObject(bucketName, fileName, is, contentType);
//            }
//
//            String path = endpoint + "/" + bucketName + "/" + fileName;
//            return path;
//        } catch (Exception e) {
//            // 记录日志并保持异常传递
//            log.error("上传文件失败：{}", e.getMessage(), e);
//            throw e; // 或者根据具体需求包装成自定义异常抛出
//        }
//    }
//
//
//
//    public String generatePresignedUrl(String fullPath,String filenameR) {
//        String[] strings = parseBucketAndFilename(fullPath);
//        String bucketName = strings[0];
//        String fileName = strings[1];
//
//        // 设置响应内容
////            String url = client.presignedGetObject(bucketName, fileName, Constant.LINK_VALIDITY_TIME);
////            if (filenameR != null && !filenameR.isEmpty()) {
////                url += "&response-content-disposition=attachment;filename=" + filenameR;
////            }
////            return url;
//        return null;
//
//    }
//
//
//    /**
//     * 根据展示路径获取文件的输入流
//     *
//     * @param displayPath 展示路径
//     * @return 文件的输入流，如果路径无效或发生错误，则返回 null
//     */
//    @SneakyThrows
//    public InputStream getFileInputStreamFromDisplayPath(String displayPath) {
//        try {
//            // 解析存储桶名称和文件名称
//            String[] bucketAndFile = parseBucketAndFilename(displayPath);
//            if (bucketAndFile == null || bucketAndFile.length != 2) {
//                log.error("展示路径格式不正确：{}", displayPath);
//                return null;
//            }
//
//            String bucketName = bucketAndFile[0];
//            String objectName = bucketAndFile[1];
//
//            // 获取文件输入流
////            InputStream inputStream = client.getObject(bucketName, objectName);
////            if (inputStream == null) {
////                log.error("无法从 MinIO 获取文件：{}", displayPath);
////                return null;
////            }
////
////            return inputStream;
//            return null;
//        } catch (Exception e) {
//            log.error("获取文件输入流时发生异常：{}", e.getMessage(), e);
//            return null;
//        }
//    }

}
